﻿#ifndef ADMIN_WINDOW_H
#define ADMIN_WINDOW_H

// 定义是否启用评论管理功能
// 如果UI文件没有包含评论管理选项卡，请注释掉下面这行
#define ENABLE_COMMENT_MANAGEMENT

// Headers/admin_window.h
#include <QWidget>
#include <QSqlTableModel>
#include <QSqlError>  // 添加QSqlError头文件
#include <QtCharts>   // 添加Qt Charts头文件
#include <QDateEdit>  // 添加日期编辑器
#include <QStyledItemDelegate> // 添加委托类头文件
#include <QComboBox>  // 添加QComboBox头文件
#include <QLineEdit>  // 添加QLineEdit头文件
#include "database.h"  // 添加database.h头文件
#include <QPainter>
#include <QChart>
#include <QChartView>
#include <QPushButton>
#include <QTableWidget>  // 添加QTableWidget头文件
#include <QPieSeries>    // 添加QPieSeries头文件
#include <QBarSeries>    // 添加QBarSeries头文件
#include <QComboBox>     // 添加QComboBox头文件
#include <QVBoxLayout>  // 添加布局管理器头文件

QT_BEGIN_NAMESPACE
namespace Ui { class AdminWindow; }
QT_END_NAMESPACE

using namespace QtCharts;

// 自定义委托类，用于将身份类型和审核状态从数字转换为文字
class ApplicationDelegate : public QStyledItemDelegate {
public:
    ApplicationDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {}

    QString displayText(const QVariant &value, const QLocale &locale) const override;
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;

private:
    mutable int currentColumn;
};

// 自定义委托类，用于将订单状态从数字转换为文字
class OrderStatusDelegate : public QStyledItemDelegate {
public:
    OrderStatusDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {}

    QString displayText(const QVariant &value, const QLocale &locale) const override;
};

// 自定义商品模型，用于显示配送费
class CustomCommodityModel : public QSqlTableModel
{
    Q_OBJECT

public:
    explicit CustomCommodityModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())
        : QSqlTableModel(parent, db) {}

    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
};

class AdminWindow : public QWidget {
    Q_OBJECT
public:
    explicit AdminWindow(QWidget *parent = nullptr);
    AdminWindow(database &db, QWidget *parent = nullptr);  // 添加接受数据库连接的构造函数
    ~AdminWindow();

private slots:
    void onTabChanged(int index);
    void refreshRevenue();
    void customRevenueQuery(); // 自定义时间段查询
    void updateTimeRangeFilter(int index); // 时间范围过滤器变更处理
    void updateBusinessFilter(); // 商家过滤器变更处理

    // 用户管理
    void addUser();
    void deleteUser();
    void saveUserChanges();

    // 骑手管理
    void addRider();
    void deleteRider();
    void saveRiderChanges();

    // 商户管理
    void addBusiness();
    void deleteBusiness();
    void saveBusinessChanges();

    // 商品管理
    void addCommodity();
    void deleteCommodity();
    void saveCommodityChanges();
    void searchCommodity();
    void changeCommodityStatus();
    void sortCommodityByPrice();
    void sortCommodityBySales();

    // 订单管理
    void deleteOrder();
    void saveOrderChanges();
    void searchOrder();

    // 申请审批
    void initApplicationReview();
    void approveApplication();
    void rejectApplication();

#ifdef ENABLE_COMMENT_MANAGEMENT
    // 评论管理
    void addComment();
    void deleteComment();
    void saveCommentChanges();
#endif

    void checkUnsavedChanges(); // 检查未保存的更改

private:
    void setupDatabase();
    void setupUI();  // 添加setupUI函数，用于初始化UI
    void initUserManagement();
    void initRiderManagement();
    void initBusinessManagement();
    void initCommodityManagement();
    void initOrderHistory();
    void initRevenueAnalysis();
#ifdef ENABLE_COMMENT_MANAGEMENT
    void initCommentManagement(); // 新增评论管理初始化函数
#endif
    void setupRevenueUI(); // 设置营收统计UI
    void updateRevenueChart(const QString &startDate, const QString &endDate); // 更新营收趋势图
    void updateRevenueStats(const QString &startDate, const QString &endDate); // 更新营收统计数据
    void updateTransactionTable(const QString &startDate, const QString &endDate); // 更新交易明细表

    Ui::AdminWindow *ui;
    QSqlTableModel *userModel;
    QSqlTableModel *riderModel;
    QSqlTableModel *businessModel;
    CustomCommodityModel *commodityModel;
    QSqlTableModel *orderModel;
    QSqlTableModel *applicationModel; // 新增申请审批模型
#ifdef ENABLE_COMMENT_MANAGEMENT
    QSqlTableModel *commentModel; // 新增评论模型
#endif
    QSqlDatabase db;
    bool useExternalDb;  // 标记是否使用外部数据库连接

    // 营收统计相关控件
    QDateEdit *startDateEdit;
    QDateEdit *endDateEdit;
    QPushButton *queryButton;
    QChartView *revenueChartView;  // 营收趋势图
    QTableWidget *transactionTable; // 交易明细表
    QLabel *totalRevenueLabel;     // 总营收标签
    QLabel *orderCountLabel;       // 订单数量标签
    QLabel *avgOrderLabel;         // 平均订单金额标签
    QComboBox *timeRangeCombo;     // 时间范围过滤器
    QComboBox *businessFilterCombo; // 商家过滤器
    QVBoxLayout *mainLayout;  // 添加布局管理器指针
};

#endif // ADMIN_WINDOW_H
